
#ifndef __LIBERTY_ENGINE_OBJECT_H__
#define __LIBERTY_ENGINE_OBJECT_H__

#include <string>
#include <functional>

#include <Liberty3D/Liberty3D.h>

namespace Liberty { namespace Engine {

#ifdef LIBERTY_HAS_EDITOR
    enum HideFlags {
        HideInHierarchy,
        HideInInspector,
        DontSave,
        NotEditable,
        HideAndDontSave
    };
#endif

    class Object {
    protected:
        unsigned int _instanceID;

    protected:
        Object();

    public:
        virtual ~Object();

    public:
        inline unsigned int instanceID() const { return _instanceID; }

        virtual std::string name() const = 0;
        virtual void setName(const std::string& name) = 0;

    public:
        virtual std::shared_ptr<IObjectMethod> findMethod(const std::string& methodName);

#ifdef LIBERTY_HAS_EDITOR
    protected:
        unsigned int _hideFlags;

    public:
        inline unsigned int hideFlags()  const { return _hideFlags; }
#endif
    };

}}

#endif
